package br.com.sgc.entities.produto;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import br.com.sgc.entities.geral.Clinica;


@Entity
@Table(name = "produto", schema = "produto")
@Inheritance(strategy = InheritanceType.JOINED)
public class Produto implements Serializable{
	
	private static final long serialVersionUID = 6655900693525399940L;

	@Id 
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ")
	@SequenceGenerator(schema = "produto", initialValue = 1, name = "SEQ", sequenceName = "produto.seq_produto", allocationSize = 1)
	private Long id;
	
	@Column(name = "codigo_produto")
	private String codigoProduto;
	
	private String descricao;
	
	@Column(name = "valor_venda")
	private BigDecimal valorVenda;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "clinica_id")
	private Clinica clinica;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "tipo_produto_id")
	private TipoProduto tipoProduto = new TipoProduto();
	
	@ManyToMany(fetch = FetchType.LAZY)
	@JoinTable(name = "fornecedor_produto", schema = "geral", joinColumns = @JoinColumn(name="produto_id"), inverseJoinColumns = @JoinColumn(name = "fornecedor_id"))
	private List<Fornecedor> fornecedores = new ArrayList<Fornecedor>();
	
	private Boolean deletado;
	

	//----------------------------------------------------Gets e Setters----------------------------------------------------
	
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getCodigoProduto() {
		return codigoProduto;
	}

	public void setCodigoProduto(String codigoProduto) {
		this.codigoProduto = codigoProduto;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public Clinica getClinica() {
		return clinica;
	}

	public void setClinica(Clinica clinica) {
		this.clinica = clinica;
	}

	public TipoProduto getTipoProduto() {
		return tipoProduto;
	}

	public void setTipoProduto(TipoProduto tipoProduto) {
		this.tipoProduto = tipoProduto;
	}

	public Boolean getDeletado() {
		return deletado;
	}

	public void setDeletado(Boolean deletado) {
		this.deletado = deletado;
	}

	public BigDecimal getValorVenda() {
		return valorVenda;
	}

	public void setValorVenda(BigDecimal valorVenda) {
		this.valorVenda = valorVenda;
	}

	public List<Fornecedor> getFornecedores() {
		return fornecedores;
	}

	public void setFornecedores(List<Fornecedor> fornecedores) {
		this.fornecedores = fornecedores;
	}
}
